package br.com.beautycenter.view;

import br.com.beautycenter.Funcionalidades.Swing;
import br.com.beautycenter.Funcionalidades.Validacoes;
import br.com.beautycenter.DAO.PersisteFuncionario;
import br.com.beautycenter.DAO.PersistePacoteTratamento;
import br.com.beautycenter.DAO.PersisteSessao;
import br.com.beautycenter.DAO.PersisteTipoTratamento;
import br.com.beautycenter.DAO.PersisteTratamento;
import br.com.beautycenter.ModelosTabela.JTableButtonMouseListener;
import br.com.beautycenter.ModelosTabela.JTableButtonRenderer;
import br.com.beautycenter.ModelosTabela.JTableCellRenderer;
import br.com.beautycenter.ModelosTabela.JTableDateChooserEditor;
import br.com.beautycenter.ModelosTabela.TableModelPacoteTratamento;
import br.com.beautycenter.bean.Funcionario;
import br.com.beautycenter.bean.PacoteTratamento;
import br.com.beautycenter.bean.Sessao;
import br.com.beautycenter.bean.TipoTratamento;
import br.com.beautycenter.bean.Tratamento;
import java.awt.Component;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;

public class CadastroPacoteAvulso extends javax.swing.JFrame {

    public static DadosCliente parent;
    public static PacoteTratamento pacote;
    public static List<Sessao> listaSessao;
    public static boolean editable = true;
    final TableModelPacoteTratamento modelo = new TableModelPacoteTratamento(this, listaSessao, pacote, 4, editable);
    
    PersisteSessao persisteSessao = new PersisteSessao();
    PersisteTratamento persisteTratamento = new PersisteTratamento();
    PersisteFuncionario persisteFuncionario = new PersisteFuncionario();
    PersistePacoteTratamento persistePacote = new PersistePacoteTratamento();
    PersisteTipoTratamento persisteTipo = new PersisteTipoTratamento();
    
    static boolean alteracao = false; //flag que determina se alguma coisa foi alterada na tabela
    static boolean cancelar = false;
    
    public static double inseriu = 0;
    public static double alterouPagamentoEfetuado = 0;
    public static double valorAntigo = 0;
    
    JPopupMenu menu;
    
    /**
     * Gambiarra: No tableModel, vamos pegar os o valor antigo da tabela apenas se essa flag estiver como true.
     * Ela ficará como true quando preencher a tabela na inicialização da tela
     */
    public static boolean preencheu = false; 
 
    public void configurarTabela(){
        
        tablePacoteTratamento.setModel(modelo);
        
        //pega o tipo pacote de tratamento
        TipoTratamento tipoTratamento = new TipoTratamento();
        tipoTratamento.setIdTipoTratamento(4);
        tipoTratamento = persisteTipo.retornarTipoTratamentoPeloID(tipoTratamento);
        
        //pega o primeiro tratamento do tipo pilates
        Tratamento temp = new Tratamento();
        temp.setTipoTratamento(tipoTratamento);
        temp = persisteTratamento.retornarTratamentoPeloTipo(temp).get(0);
        
        List<Tratamento> listaTratamentos = persisteTratamento.retornarTratamentoPeloTipo(temp);
        List<Funcionario> listaFuncionarios = persisteFuncionario.retornarFuncionario();
        
        JComboBox comboTratamento = new JComboBox();
        JComboBox comboFuncionario = new JComboBox();
        
        for(Tratamento item: listaTratamentos){
            comboTratamento.addItem(item.getNomeTratamento());
        }
        
        for(Funcionario item: listaFuncionarios){
            comboFuncionario.addItem(item.getNome());
        }
        
        //centraliza o conteúdo da tabela
        tablePacoteTratamento.setDefaultRenderer(Object.class, new JTableCellRenderer());
        
        tablePacoteTratamento.getColumnModel().getColumn(2).setCellEditor(new DefaultCellEditor(comboFuncionario));
        tablePacoteTratamento.getColumnModel().getColumn(3).setCellEditor(new DefaultCellEditor(comboTratamento));
        tablePacoteTratamento.getColumnModel().getColumn(8).setCellEditor(new DefaultCellEditor(comboFuncionario));
        
        //insere o jformattedtextfield na tabela
        Validacoes.inicializarMascaras();
        JFormattedTextField horario = new JFormattedTextField(Validacoes.mascaraHorario);
        tablePacoteTratamento.getColumnModel().getColumn(5).setCellEditor(new DefaultCellEditor(horario));
        
        
        //renderizando o botão
        JTableButtonRenderer botaoRenderer = new JTableButtonRenderer();
        tablePacoteTratamento.getColumn("Biometria").setCellRenderer(botaoRenderer);
        tablePacoteTratamento.addMouseListener(new JTableButtonMouseListener(tablePacoteTratamento));
        
        //renderiza o campo data
        JTableDateChooserEditor dataEditor = new JTableDateChooserEditor();
        tablePacoteTratamento.getColumn("Data").setCellEditor(dataEditor);
        
        //define o tamanho de cada coluna
        tablePacoteTratamento.getColumnModel().getColumn(0).setPreferredWidth(40); //*
        tablePacoteTratamento.getColumnModel().getColumn(1).setPreferredWidth(80);//nº
        tablePacoteTratamento.getColumnModel().getColumn(2).setPreferredWidth(160);//funcionario
        tablePacoteTratamento.getColumnModel().getColumn(3).setPreferredWidth(160);//tratamento
        tablePacoteTratamento.getColumnModel().getColumn(4).setPreferredWidth(80);//data
        tablePacoteTratamento.getColumnModel().getColumn(5).setPreferredWidth(120);//horario
        tablePacoteTratamento.getColumnModel().getColumn(6).setPreferredWidth(120);//valor
        tablePacoteTratamento.getColumnModel().getColumn(7).setPreferredWidth(120);//pagamento efetuado
        tablePacoteTratamento.getColumnModel().getColumn(9).setPreferredWidth(80);//presença
        tablePacoteTratamento.getColumnModel().getColumn(10).setPreferredWidth(80);//biometria
        
        tablePacoteTratamento.getColumnModel().getColumn(8).setPreferredWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(8).setMinWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(8).setMaxWidth(0);//indicação
        
        //adcionar um listener para quando o usuário clicar com o botao direito do mouse na coluna horário
        menu = Swing.criarJPopup();
        tablePacoteTratamento.addMouseListener(new MouseAdapter() {

            @Override
            public void mousePressed(MouseEvent e) {
                exibirPopup(e);
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                exibirPopup(e);
            }
            
            
            
            private void exibirPopup(MouseEvent e){
                if(menu.isPopupTrigger(e)){
                    Point ponto = e.getPoint(); //pega o ponto onde foi clicado
                    int linha = tablePacoteTratamento.rowAtPoint(ponto); //pega a linha do click
                    int coluna = tablePacoteTratamento.columnAtPoint(ponto); //pega a coluna do ponto
                    
                    //se ele clicou na tabela e a coluna for a 4(horário) exibe o popup
                    if(linha != -1 && coluna == 4){
                        menu.show(tablePacoteTratamento, ponto.x, ponto.y); //cria o popup a partir do ponto de click
                    }
                }
            }
            
        });
        
        //listener que identificar mudanças na tabela
        modelo.addTableModelListener(new TableModelListener() {

            @Override
            public void tableChanged(TableModelEvent e) {
                alteracao = true;
                configurarBotoes();
                inserirValoresInformativos();
            }
        });
        
        preencheu = true;
        
    }
    
    /**
     * Informa o total a pagar e o total pago
     */
    public void inserirValoresInformativos(){
        double totalPacote = modelo.somatorioTotalPacote();
        double totalPago = modelo.somatorioPago();
        
        //double totalCredito = modelo.retornarTotalCredito();
        BigDecimal bdPacote = new BigDecimal(totalPacote).setScale(2, RoundingMode.HALF_EVEN);
        BigDecimal bdPago = new BigDecimal(totalPago).setScale(2, RoundingMode.HALF_EVEN);
        txtTotalPacote.setText(Validacoes.formatoMoeda.format(totalPacote));
        txtTotalPago.setText(Validacoes.formatoMoeda.format(totalPago));
        
        if(bdPacote.compareTo(bdPago)>0){
            txtTotalAPagar.setText(Validacoes.formatoMoeda.format(bdPacote.subtract(bdPago).doubleValue()));
        }else{
            txtTotalAPagar.setText(Validacoes.formatoMoeda.format(0));
        }
        
        //txtSaldoParcial.setText(Validacoes.formatoMoeda.format(totalCredito + alterouPagamentoEfetuado - inseriu));
        //txtSaldoParcial.setText(Validacoes.formatoMoeda.format(modelo.retornarSaldoParcial()));
    }
    
    /************** Métodos referentes as ações dos botões ************************/
    /**
     * quando for apenas para exibir o pacote, exibe apenas o botão sair
     */
    public void ocultarBotoes(){
        for(Component item: jPainelBotoes.getComponents()){
            item.setVisible(false);
        }
        
        btnImprmir.setVisible(true);
        btnSair.setVisible(true);
    }
    
    public void ocultarColunas(){
        tablePacoteTratamento.getColumnModel().getColumn(0).setPreferredWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(0).setMinWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(0).setMaxWidth(0);//indicação
        
        tablePacoteTratamento.getColumnModel().getColumn(0).setPreferredWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(0).setMinWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(0).setMaxWidth(0);//indicação
        
        tablePacoteTratamento.getColumnModel().getColumn(10).setPreferredWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(10).setMinWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(10).setMaxWidth(0);//indicação
        
        tablePacoteTratamento.getColumnModel().getColumn(8).setPreferredWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(8).setMinWidth(0);//indicação
        tablePacoteTratamento.getColumnModel().getColumn(8).setMaxWidth(0);//indicação
    }
    
    /**
     * Determina quais botões ficarão ativos. Caso seja feita alguma alteração na  tabela
     * os botões salvar e cancelar ficarão ativos. <br /><br />
     * 
     * Os botão de excluir ficará ativo somente se tiver algum dado na tabela.
     */
    public void configurarBotoes(){
        cancelar = btnCancelar.isEnabled();
        Swing.desativarCampos(jPainelBotoes.getComponents()); //desativa todos os botões
        
        btnAdicionar.setEnabled(true); //fica ativo em todos os casos
        btnSair.setEnabled(true); //fica ativo em todos os casos
        btnImprmir.setEnabled(true);
        
        
        //se foi feita alguma alteração ativa os botões salvar e cancelar
        if(alteracao){
            btnSalvar.setEnabled(true);
            btnCancelar.setEnabled(true);
        }
        
        //se tiver algum dado na tela ativa os botões editar e selecionar
        if(modelo.getRowCount() > 0){
            btnExcluir.setEnabled(true);
            btnSelecionar.setEnabled(true);
        }
    }
    
    /**
     * Pega toda a lista e salva no banco de dados
     */
    public void salvar(){
        modelo.salvarBD();
        alteracao = false;
    }
    
    //se o botão estiver selecionado, então marca todos, caso contrário, desmarca todos
    public void selecionar(){
        if(btnSelecionar.isSelected()){
            modelo.selecionarTodos();
        }else{
            modelo.desmarcarTodos();
        }   
    }
    
    /**
     * Usa um iterator para ir removendo os que estão marcados
     */
    public void excluir(){
        modelo.removerSelecionados();
    }
    
    /**
     * limpa toda a lista e pega os dados que estão no banco de dados. 
     */
    public void cancelar(){
        int resposta = JOptionPane.NO_OPTION;
        if(alteracao){
            resposta = JOptionPane.showConfirmDialog(null, "Cancelando você perderá todos os dados alterados anteriormente. Deseja "
                    + "mesmo fazer isso?");
            if(resposta == JOptionPane.OK_OPTION){
                //busca o pacote no banco de dados. Evita problema de estar desatualizado
                modelo.confirmarValoresPacote();
                pacote = persistePacote.retornarPacotePeloID(pacote); 
                
                modelo.clear(); //limpa a lista
                modelo.addListaSessoes(pacote.getListaSessoes()); //insere a lista atualizada
                alteracao = false;
            }
        }
    }
    
    public void sair(){
        int resposta = JOptionPane.NO_OPTION;
        if(alteracao){
            resposta = JOptionPane.showConfirmDialog(null, "Os dados originais foram alterados, deseja salvar?"
                    , "Confirmação", JOptionPane.YES_NO_OPTION);
            if(resposta == JOptionPane.YES_OPTION){
                salvar();
            }
        }
        alteracao = false;
        dispose();
    }
    
    @Override
    public void dispose() {
        super.dispose(); //To change body of generated methods, choose Tools | Templates.
        modelo.verificarPacoteVazio();
        parent.dispose();
    }
    
    public void adicionar(){
        modelo.adicionarSessao();
    }
    
    public void confirmarRecebimento(){
        Double valor = Validacoes.validarCampoMoeda(txtValorRecebido.getText().trim());
        
        if(valor == null) {
            JOptionPane.showMessageDialog(null, "O valor informado não é válido!");
            txtValorRecebido.requestFocus();
        }else{
            modelo.confirmarRecebimento(valor);
            txtValorRecebido.setText("");
            JOptionPane.showMessageDialog(null, "Pagamento confirmado com sucesso. Clique em Salvar para que essa "
                    + "operação seja confirmada no banco de dados.");
        }
    }
    
    public void configuracoesIniciais(){
        configurarTabela();
        btnCancelar.setEnabled(false);
        configurarBotoes();
        inserirValoresInformativos();
    }

    public CadastroPacoteAvulso() {
        super("CadastroPacoteTratamento");
        initComponents();
        configuracoesIniciais();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPainelBotoes = new javax.swing.JPanel();
        btnSelecionar = new javax.swing.JToggleButton();
        btnAdicionar = new javax.swing.JButton();
        btnExcluir = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        btnSalvar = new javax.swing.JButton();
        btnImprmir = new javax.swing.JButton();
        btnSair = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tablePacoteTratamento = new javax.swing.JTable();
        jLabel1 = new javax.swing.JLabel();
        txtTotalPacote = new javax.swing.JTextField();
        txtTotalPago = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        txtTotalAPagar = new javax.swing.JTextField();
        jLabel6 = new javax.swing.JLabel();
        btnConfirmarRecebimento = new javax.swing.JButton();
        txtValorRecebido = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Pacote Tratamento");
        setBackground(new java.awt.Color(255, 255, 255));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }
        });
        addWindowStateListener(new java.awt.event.WindowStateListener() {
            public void windowStateChanged(java.awt.event.WindowEvent evt) {
                formWindowStateChanged(evt);
            }
        });
        addPropertyChangeListener(new java.beans.PropertyChangeListener() {
            public void propertyChange(java.beans.PropertyChangeEvent evt) {
                formPropertyChange(evt);
            }
        });

        jPainelBotoes.setBackground(new java.awt.Color(255, 255, 255));
        jPainelBotoes.setPreferredSize(new java.awt.Dimension(800, 45));

        btnSelecionar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/select_all.png"))); // NOI18N
        btnSelecionar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSelecionarActionPerformed(evt);
            }
        });
        jPainelBotoes.add(btnSelecionar);

        btnAdicionar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Novo.png"))); // NOI18N
        btnAdicionar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAdicionarActionPerformed(evt);
            }
        });
        jPainelBotoes.add(btnAdicionar);

        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Excluir.png"))); // NOI18N
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });
        jPainelBotoes.add(btnExcluir);

        btnCancelar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Cancelar.png"))); // NOI18N
        btnCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCancelarActionPerformed(evt);
            }
        });
        jPainelBotoes.add(btnCancelar);

        btnSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Salvar.png"))); // NOI18N
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });
        jPainelBotoes.add(btnSalvar);

        btnImprmir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Imprimir.png"))); // NOI18N
        btnImprmir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnImprmirActionPerformed(evt);
            }
        });
        jPainelBotoes.add(btnImprmir);

        btnSair.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/beautycenter/img/Sair.png"))); // NOI18N
        btnSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSairActionPerformed(evt);
            }
        });
        jPainelBotoes.add(btnSair);

        tablePacoteTratamento.setRowHeight(50);
        jScrollPane1.setViewportView(tablePacoteTratamento);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel1.setText("Total do Pacote: ");

        txtTotalPacote.setEnabled(false);

        txtTotalPago.setEnabled(false);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(0, 51, 204));
        jLabel2.setText("Total pago:");

        jLabel3.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel3.setForeground(new java.awt.Color(255, 51, 51));
        jLabel3.setText("Total à Pagar:");

        txtTotalAPagar.setEnabled(false);

        jLabel6.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLabel6.setForeground(new java.awt.Color(0, 0, 255));
        jLabel6.setText("Informe o valor recebido para que seja quitadas as sessões");

        btnConfirmarRecebimento.setText("Confirmar Recebimento");
        btnConfirmarRecebimento.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnConfirmarRecebimentoActionPerformed(evt);
            }
        });

        jLabel5.setFont(new java.awt.Font("Tahoma", 1, 18)); // NOI18N
        jLabel5.setText("Valor Recebido:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPainelBotoes, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 970, Short.MAX_VALUE)
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 970, Short.MAX_VALUE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1)
                    .addComponent(jLabel5))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtTotalPacote, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(txtValorRecebido, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtTotalPago, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(jLabel3)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(txtTotalAPagar, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(btnConfirmarRecebimento)
                        .addGap(18, 18, 18)
                        .addComponent(jLabel6)
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jPainelBotoes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 505, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(txtTotalPago, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(jLabel1)
                        .addComponent(txtTotalPacote, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(jLabel2)
                        .addComponent(jLabel3)
                        .addComponent(txtTotalAPagar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(txtValorRecebido, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(btnConfirmarRecebimento)
                        .addComponent(jLabel6)))
                .addContainerGap(20, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {txtTotalAPagar, txtTotalPacote, txtTotalPago});

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnSelecionarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSelecionarActionPerformed
        selecionar();
    }//GEN-LAST:event_btnSelecionarActionPerformed

    private void btnAdicionarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAdicionarActionPerformed
        adicionar();
    }//GEN-LAST:event_btnAdicionarActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
        excluir();
    }//GEN-LAST:event_btnExcluirActionPerformed

    private void btnCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelarActionPerformed
        cancelar();
        btnCancelar.setEnabled(false);
        btnSalvar.setEnabled(false);
        
    }//GEN-LAST:event_btnCancelarActionPerformed

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed
        salvar();
        btnCancelar.setEnabled(false);
        btnSalvar.setEnabled(false);
    }//GEN-LAST:event_btnSalvarActionPerformed

    private void btnSairActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSairActionPerformed
        sair();
    }//GEN-LAST:event_btnSairActionPerformed

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        sair();
    }//GEN-LAST:event_formWindowClosing

    private void formPropertyChange(java.beans.PropertyChangeEvent evt) {//GEN-FIRST:event_formPropertyChange
        configurarBotoes();
    }//GEN-LAST:event_formPropertyChange

    private void formWindowStateChanged(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowStateChanged
        configurarBotoes();
    }//GEN-LAST:event_formWindowStateChanged

    private void btnImprmirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnImprmirActionPerformed
        modelo.imprimirRelatorio(false);
    }//GEN-LAST:event_btnImprmirActionPerformed

    private void btnConfirmarRecebimentoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnConfirmarRecebimentoActionPerformed
        confirmarRecebimento();
    }//GEN-LAST:event_btnConfirmarRecebimentoActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAdicionar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnConfirmarRecebimento;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnImprmir;
    private javax.swing.JButton btnSair;
    private javax.swing.JButton btnSalvar;
    private javax.swing.JToggleButton btnSelecionar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JPanel jPainelBotoes;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable tablePacoteTratamento;
    private javax.swing.JTextField txtTotalAPagar;
    private javax.swing.JTextField txtTotalPacote;
    private javax.swing.JTextField txtTotalPago;
    private javax.swing.JTextField txtValorRecebido;
    // End of variables declaration//GEN-END:variables
}